Данный макрос включается автоматически при создании объекта на основе ATL:
/////////////////////////////
// Ceee
class ATL_NO_VTABLE Ceee:
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl
{
public:
Ceee()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_EEE)
Смысл этого макроса обновить системный реестр путем вызова функции UpdateRegistryFromResource():
#define DECLARE_REGISTRY_RESOURCE(x)\
static HRESULT WINAPI UpdateRegistry(BOOL bRegister)\
{\
return _Module.UpdateRegistryFromResource(_T(#x), bRegister);\
}
Эта функция использует идентификатор ресурса для обновления реестра. Вы можете найти этот идентификатор в ресурсах. Там записана информация для помещения в реестр.

Данная методика применяется часто при работе с OLE. Например, если Вы создаете приложение сервер ActiveX, то там то же при запуске приложения производится обновления реестра:
// When a server application is launched stand-alone, it is a good idea // to update the system registry in case it has been damaged. m_server.UpdateRegistry(OAT_INPLACE_SERVER); // Dispatch commands specified on the command line
Этот подход чрезвычайно грамотный на мой взгляд. Запустил приложение, а оно взяло и зарегистрировало компоненты. Именно такая возможность при запуске, а не только при инсталляции. И хотя здесь приложение регистрируем само себя, но не тяжело добавиться и регистрацию других.